Groovy তে Unit Testing করার জন্য দুটি জনপ্রিয় ফ্রেমওয়ার্ক হলো JUnit এবং Spock। JUnit মূলত Java এর জন্য তৈরি হলেও Groovy তেও এটি কার্যকরভাবে কাজ করে। অন্যদিকে, Spock বিশেষভাবে Groovy ভিত্তিক একটি শক্তিশালী ফ্রেমওয়ার্ক, যা JUnit এর উপর ভিত্তি করে উন্নত করা হয়েছে এবং BDD (Behavior-Driven Development) স্টাইলের টেস্টিং সমর্থন করে।
JUnit হলো Java এর জন্য একটি স্ট্যান্ডার্ড টেস্টিং ফ্রেমওয়ার্ক, যা Unit Testing এর জন্য ব্যবহৃত হয়। এটি সাধারণত অ্যাসার্ট করে যে কোড সঠিকভাবে কাজ করছে কিনা এবং যেকোনো পরিবর্তন বা ত্রুটি তাৎক্ষণিকভাবে সনাক্ত করে।
Groovy তে JUnit ব্যবহার করার জন্য JUnit এর লাইব্রেরি অন্তর্ভুক্ত করতে হয়। সাধারণত JUnit এর @Test
অ্যানোটেশন ব্যবহার করে টেস্ট মেথড তৈরি করা হয়।
import org.junit.Test
import static org.junit.Assert.*
class MathUtilsTest {
@Test
void testAddition() {
def result = 3 + 4
assertEquals(7, result)
}
@Test
void testSubtraction() {
def result = 10 - 3
assertEquals(7, result)
}
}
উপরে, MathUtilsTest
নামে একটি ক্লাস তৈরি করা হয়েছে যেখানে testAddition()
এবং testSubtraction()
নামে দুটি টেস্ট মেথড রয়েছে। assertEquals()
ব্যবহার করে প্রত্যাশিত ফলাফল এবং প্রকৃত ফলাফল যাচাই করা হচ্ছে।
@Test
, @Before
, @After
, @BeforeClass
, @AfterClass
ইত্যাদি অ্যানোটেশন রয়েছে।Spock হলো Groovy ভিত্তিক একটি শক্তিশালী টেস্টিং এবং স্পেসিফিকেশন ফ্রেমওয়ার্ক যা JUnit এর উপর ভিত্তি করে তৈরি, তবে এটি অধিক ব্যবহারবান্ধব এবং BDD (Behavior-Driven Development) স্টাইল সমর্থন করে। Spock এর সাহায্যে মকিং এবং স্টাবিং সহজে করা যায় এবং এটি টেস্টগুলিকে আরও বেশি পাঠযোগ্য এবং সহজ করে তোলে।
Spock ব্যবহার করতে @Grab
বা Maven এর মাধ্যমে Spock লাইব্রেরি অন্তর্ভুক্ত করতে হয়। Spock এ টেস্ট ক্লাস সাধারণত Specification
ক্লাস এক্সটেন্ড করে।
import spock.lang.Specification
class MathUtilsSpec extends Specification {
def "addition should return the correct sum"() {
expect:
3 + 4 == 7
}
def "subtraction should return the correct difference"() {
expect:
10 - 3 == 7
}
}
Spock এ expect:
ব্লক ব্যবহার করে প্রত্যাশিত ফলাফল নির্ধারণ করা হয়। উদাহরণে, MathUtilsSpec
ক্লাসে দুটি টেস্ট রয়েছে যেখানে প্রত্যাশিত এবং প্রকৃত ফলাফল তুলনা করা হচ্ছে।
বৈশিষ্ট্য | JUnit | Spock |
---|---|---|
ভাষা | Java ভিত্তিক | Groovy ভিত্তিক |
টেস্ট স্টাইল | TDD (Test-Driven Development) | BDD (Behavior-Driven Development) |
অ্যানোটেশন | @Test , @Before , @After | N/A (DSL ভিত্তিক) |
মকিং/স্টাবিং | বাইরের লাইব্রেরি প্রয়োজন | বিল্ট-ইন মকিং এবং স্টাবিং সমর্থন |
পাঠযোগ্যতা | সাধারণ, Java স্টাইল | অত্যন্ত সহজ এবং পাঠযোগ্য DSL স্টাইল |
ডেটা ড্রিভেন টেস্টিং | সীমিত সমর্থন | সমৃদ্ধ ডেটা ড্রিভেন টেস্টিং সমর্থন |
Spock এ ডেটা ড্রিভেন টেস্টিং সহজে করা যায়, যেখানে একাধিক ইনপুট ভ্যালুর জন্য একাধিক আউটপুট পরীক্ষা করা সম্ভব।
import spock.lang.Specification
import spock.lang.Unroll
class MathUtilsSpec extends Specification {
@Unroll
def "adding #a and #b should result in #result"() {
expect:
a + b == result
where:
a | b || result
3 | 4 || 7
2 | 5 || 7
10 | -3 || 7
}
}
উপরে @Unroll
অ্যানোটেশন ব্যবহার করে প্রতিটি ইনপুট সেট আলাদা টেস্ট হিসেবে চালানো হচ্ছে। where
ব্লকে ভিন্ন ভিন্ন ইনপুট প্রদান করে একাধিক ফলাফল যাচাই করা হচ্ছে।
JUnit সহজ এবং প্রতিষ্ঠিত হলেও, Groovy প্রজেক্টে Spock বেশি জনপ্রিয়, কারণ এটি Groovy এর সাথে আরও ভালোভাবে ইন্টিগ্রেট হয় এবং আরও উন্নত টেস্টিং ফিচার প্রদান করে।
common.read_more